# -*- coding: utf-8 -*-
"""
上传月日历图片到电子墨水屏
"""

import asyncio
import base64
import os
from PIL import Image
import io
from imgUtils import process_image
from sendUtils import send_data_async
from calendar_generator import generate_monthly_calendar, save_calendar_image, generate_small_calendar_with_padding
 
async def upload_calendar(use_small_calendar=True, scale_factor=4):
    """
    生成并上传月日历图片到电子墨水屏
    :param use_small_calendar: 是否使用缩小的日历图片并补白，默认为True
    :param scale_factor: 缩小比例，默认为4（即缩小到原来的1/4）
    :return: 是否成功
    """
    try:
        print("步骤1: 生成月日历图片...")
        # 根据参数决定是否生成缩小的日历图片并补白
        if use_small_calendar:
            print(f"生成缩小的日历图片（缩小比例：1/{scale_factor}）并补白...")
            calendar_img = generate_small_calendar_with_padding(
                scale_factor=scale_factor
            )
            # 保存原始尺寸但内容缩小的图片
            save_calendar_image(calendar_img, "monthly_calendar_small_padded.png")
        else:
            # 生成原始尺寸的日历图片
            calendar_img = generate_monthly_calendar()
            # 保存图片
            save_calendar_image(calendar_img, "monthly_calendar.png")
        # 将图片转换为base64字符串
        buffered = io.BytesIO()
        calendar_img.save(buffered, format="PNG")
        img_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
        
        print("步骤2: 处理图片...")
        # 处理图片（灰度化或抖动）
        # processed_img_base64 = process_image(is_lvl, is_red, img_base64)
        
        print("步骤3: 发送数据到设备...")
        # 发送数据到设备
        result = await send_data_async(img_base64)
        
        if result:
            print("月日历图片上传成功！")
        else:
            print("月日历图片上传失败。")
        
        return result
    
    except Exception as e:
        print(f"上传过程中出错: {e}")
        return False

# 保存日历图片到本地（可选）
def save_calendar_locally(output_path="monthly_calendar.png", use_small_calendar=True, scale_factor=4):
    """
    生成月日历图片并保存到本地
    :param output_path: 输出路径
    :param use_small_calendar: 是否使用缩小的日历图片并补白，默认为True
    :param scale_factor: 缩小比例，默认为4（即缩小到原来的1/4）
    """
    try:
        # 根据参数决定是否生成缩小的日历图片并补白
        if use_small_calendar:
            print(f"生成缩小的日历图片（缩小比例：1/{scale_factor}）并补白...")
            calendar_img = generate_small_calendar_with_padding(
                scale_factor=scale_factor 
            )
        else:
            # 生成原始尺寸的日历图片
            calendar_img = generate_monthly_calendar()
        
        # 保存图片
        calendar_img.save(output_path)
        print(f"日历图片已保存至: {output_path}")
        return True
    except Exception as e:
        print(f"保存图片时出错: {e}")
        return False

# 主函数
async def main():
    # 是否使用缩小的日历图片并补白
    use_small_calendar = True  # 使用缩小的日历图片并补白
    scale_factor = 1  # 缩小比例，默认为4（即缩小到原来的1/4）
    
    # 上传日历图片
    await upload_calendar(
        use_small_calendar=use_small_calendar, 
        scale_factor=scale_factor
    )

# 运行异步主函数
if __name__ == "__main__":
    # 上传日历图片到设备
    asyncio.run(main())